/*
 * @Author: 田鑫
 * @Date: 2023-02-21 15:11:01
 * @LastEditors: 田鑫
 * @LastEditTime: 2023-02-21 15:11:02
 * @Description:
 */
import type { AppContext, Component, DefineComponent } from 'vue';
import type { ModalConfig } from '@arco-design/web-vue';

import { ModalSimple } from '@/components/_base';

type CompType = DefineComponent | Component;
interface SlotsType {
  default?: CompType;
  header?: CompType;
  close?: CompType;
}

export const useModal = () => {
  const instance = getCurrentInstance();

  const Modal = AModal;

  Modal._context = instance?.appContext as AppContext;

  Modal.simple = (config: ModalConfig, slots: SlotsType) => {
    const { title, content, ..._config } = config || {};

    const modal = Modal.open({
      ..._config,
      simple: false,
      footer: false,
      closable: false,
      content: () =>
        h(
          ModalSimple,
          {
            title,
            content,
            onClose: modal.close,
          },
          {
            default: slots?.default,
            header: slots?.header,
            close: slots?.close,
          },
        ),
    });

    return modal;
  };

  return { Modal };
};
